﻿using System.Diagnostics.Contracts;

namespace System.Reactive.Linq
{
	public static partial class Observable
	{
		public static IObservable<TResult> Join<TLeft, TRight, TLeftDuration, TRightDuration, TResult>(this IObservable<TLeft> left, IObservable<TRight> right, Func<TLeft, IObservable<TLeftDuration>> leftDurationSelector, Func<TRight, IObservable<TRightDuration>> rightDurationSelector, Func<TLeft, TRight, TResult> resultSelector)
		{
			Contract.Requires(left != null, null, "left != null");
			Contract.Requires(right != null, null, "right != null");
			Contract.Requires(leftDurationSelector != null, null, "leftDurationSelector != null");
			Contract.Requires(rightDurationSelector != null, null, "rightDurationSelector != null");
			Contract.Requires(resultSelector != null, null, "resultSelector != null");
			Contract.Ensures(Contract.Result<IObservable<TResult>>() != null, null, "Contract.Result<IObservable<TResult>>() != null");
			return null;
		}
	}
}